Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 多维数据集写回表有时不更新_Excel_Vba - Fatal编程技术网

Excel 多维数据集写回表有时不更新

Excel 多维数据集写回表有时不更新,excel,vba,Excel,Vba,下面是我的代码。此代码将检查2列中的值并更新多维数据集/写回表。 大多数情况下,所有4个多维数据集/写回表都会更新。非常罕见的是,财务多维数据集(If块循环的第二个)并没有更新。我无法重现问题,也无法找出问题的确切位置,因为大多数情况下都会发生更新。 非常感谢您的帮助 enter code here n = FreeFile() Open "C:\Users\sree\Desktop\test5.text" For Output As #n s = Application.U

下面是我的代码。此代码将检查2列中的值并更新多维数据集/写回表。 大多数情况下,所有4个多维数据集/写回表都会更新。非常罕见的是,财务多维数据集(If块循环的第二个)并没有更新。我无法重现问题,也无法找出问题的确切位置,因为大多数情况下都会发生更新。 非常感谢您的帮助

enter code here
n = FreeFile()
Open "C:\Users\sree\Desktop\test5.text" For Output As #n
s = Application.UserName

Print #n, s
Dim cn As New ADODB.Connection
If Range("DB").Text = "Finance - Current FY Finance - Consol" Then
   cn.Open "Data Source=XXXXXX;Provider=MSOLAP.8;Initial Catalog=FINANCE - CURRENT FY"
   For Each cellX In Sheets("Data").Range("trans")
       If cellX.Value <> "" And cellX.Offset(0, 6).Value <> cellX.Offset(0, 7).Value Then
          s = CStr(cellX.Value) & ";Changed Value: " &    CStr(cellX.Offset(0, 6).Value) & ";DB value: " &               CStr(cellX.Offset(0, 7).Value)
          Print #n, s
          uMDX = ""
          uMDX = uMDX + "UPDATE CUBE [Finance - Consol] SET ([Measures].[Amount]"
          uMDX = uMDX + ",[Movements].[Monthly Movement].[Financial Day].&[" & cellX.Offset(0, 
                 -3).Value & "]"
          uMDX = uMDX + ",[Transaction Detail].[Transaction ID].&[" & cellX.Value & "]"
          uMDX = uMDX + ") = " & cellX.Offset(0, -2).Value
          uMDX = uMDX + " USE_EQUAL_ALLOCATION"
          UpdateStatement = uMDX
          s = uMDX
          Print #n, s
          cn.Execute UpdateStatement
          uMDX = ""
          uMDX = uMDX + "UPDATE CUBE [Finance - Divisional] SET ([Measures].[Amount]"
          uMDX = uMDX + ",[Movements].[Monthly Movement].[Financial Day].&[" & cellX.Offset(0, 
                -3).Value & "]"
          uMDX = uMDX + ",[Transaction Detail].[Transaction ID].&[" & cellX.Value & "]"
          uMDX = uMDX + ") = " & cellX.Offset(0, -2).Value
          uMDX = uMDX + " USE_EQUAL_ALLOCATION"
          UpdateStatement = uMDX
          s = uMDX
          Print #n, s
          cn.Execute UpdateStatement
          ctr = ctr + 1
       End If
   Next cellX

   Sheets("Data").Calculate
   If ctr > 0 Then
      CommitStatement = "COMMIT TRAN"
      cn.Execute CommitStatement
   End If
   cn.Close
   cn.Open "Data Source=XXXXX;Provider=MSOLAP.8;Initial Catalog=FINANCE"

   For Each cellX In Sheets("Data").Range("trans")
   If cellX.Value <> "" And cellX.Offset(0, 6).Value <> cellX.Offset(0, 7).Value Then
    s = CStr(cellX.Value) & ";Changed Value: " & CStr(cellX.Offset(0, 6).Value) & ";DB value: " & CStr(cellX.Offset(0, 7).Value)
    Print #n, s
    uMDX = ""
    uMDX = uMDX + "UPDATE CUBE [Finance - Consol] SET ([Measures].[Amount]"
    uMDX = uMDX + ",[Movements].[Monthly Movement].[Financial Day].&[" & cellX.Offset(0, -3).Value & 
    "]"
    uMDX = uMDX + ",[Transaction Detail].[Transaction ID].&[" & cellX.Value & "]"
    uMDX = uMDX + ") = " & cellX.Offset(0, -2).Value
    uMDX = uMDX + " USE_EQUAL_ALLOCATION"
    UpdateStatement = uMDX
    s = uMDX
    Print #n, s
    cn.Execute UpdateStatement
    uMDX = ""
    uMDX = uMDX + "UPDATE CUBE [Finance - Divisional] SET ([Measures].[Amount]"
    uMDX = uMDX + ",[Movements].[Monthly Movement].[Financial Day].&[" & cellX.Offset(0, -3).Value & 
    "]"
    uMDX = uMDX + ",[Transaction Detail].[Transaction ID].&[" & cellX.Value & "]"
    uMDX = uMDX + ") = " & cellX.Offset(0, -2).Value
    uMDX = uMDX + " USE_EQUAL_ALLOCATION"
    UpdateStatement = uMDX
    s = uMDX
    Print #n, s
    cn.Execute UpdateStatement
    ctr = ctr + 1
  End If
  Next cellX

 Sheets("Data").Calculate
  If ctr > 0 Then
   CommitStatement = "COMMIT TRAN"
   cn.Execute CommitStatement
 End If

 Else
在此处输入代码
n=FreeFile()
打开“C:\Users\sree\Desktop\test5.text”以输出为#n
s=Application.UserName
印刷品
Dim cn作为新的ADODB.连接
如果范围(“DB”).Text=“财务-当前财年财务-控制台”,则
cn.Open“数据源=XXXXXX;提供者=MSOLAP.8;初始目录=财务-当前财年”
对于表格中的每个cellX(“数据”)。范围(“trans”)
如果cellX.Value“”和cellX.Offset(0,6)。值cellX.Offset(0,7)。则
s=CStr(cellX.Value)和“更改值:”&CStr(cellX.Offset(0,6.Value)”和“DB值:”&CStr(cellX.Offset(0,7.Value))
印刷品
uMDX=“”
uMDX=uMDX+“更新多维数据集[Finance-Console]集([Measures].[Amount]”
uMDX=uMDX+“,[移动].[每月移动].[财务日].&[”&单元格x.偏移量(0,
-3) .Value&“]”
uMDX=uMDX+“,[Transaction Detail]。[Transaction ID]。&[”&cellX.Value&“]
uMDX=uMDX+“”=“&cellX.Offset(0,-2).Value
uMDX=uMDX+“使用相等的分配”
UpdateStatement=uMDX
s=uMDX
印刷品
cn.executeupdatestatement
uMDX=“”
uMDX=uMDX+“更新多维数据集[财务-部门]集([度量]。[金额]”
uMDX=uMDX+“,[移动].[每月移动].[财务日].&[”&单元格x.偏移量(0,
-3) .Value&“]”
uMDX=uMDX+“,[Transaction Detail]。[Transaction ID]。&[”&cellX.Value&“]
uMDX=uMDX+“”=“&cellX.Offset(0,-2).Value
uMDX=uMDX+“使用相等的分配”
UpdateStatement=uMDX
s=uMDX
印刷品
cn.executeupdatestatement
ctr=ctr+1
如果结束
下一个cellX
表格(“数据”)。计算
如果ctr>0,则
CommitStatement=“提交传输”
cn.执行承诺陈述
如果结束
cn.Close
cn.Open“数据源=XXXXX;提供者=MSOLAP.8;初始目录=FINANCE”
对于表格中的每个cellX(“数据”)。范围(“trans”)
如果cellX.Value“”和cellX.Offset(0,6)。值cellX.Offset(0,7)。则
s=CStr(cellX.Value)和“更改值:”&CStr(cellX.Offset(0,6.Value)”和“DB值:”&CStr(cellX.Offset(0,7.Value))
印刷品
uMDX=“”
uMDX=uMDX+“更新多维数据集[Finance-Console]集([Measures].[Amount]”
uMDX=uMDX+“,[变动].[每月变动].[财务日].&[”&单元格x.偏移量(0,-3).值&
"]"
uMDX=uMDX+“,[Transaction Detail]。[Transaction ID]。&[”&cellX.Value&“]
uMDX=uMDX+“”=“&cellX.Offset(0,-2).Value
uMDX=uMDX+“使用相等的分配”
UpdateStatement=uMDX
s=uMDX
印刷品
cn.executeupdatestatement
uMDX=“”
uMDX=uMDX+“更新多维数据集[财务-部门]集([度量]。[金额]”
uMDX=uMDX+“,[变动].[每月变动].[财务日].&[”&单元格x.偏移量(0,-3).值&
"]"
uMDX=uMDX+“,[Transaction Detail]。[Transaction ID]。&[”&cellX.Value&“]
uMDX=uMDX+“”=“&cellX.Offset(0,-2).Value
uMDX=uMDX+“使用相等的分配”
UpdateStatement=uMDX
s=uMDX
印刷品
cn.executeupdatestatement
ctr=ctr+1
如果结束
下一个cellX
表格(“数据”)。计算
如果ctr>0,则
CommitStatement=“提交传输”
cn.执行承诺陈述
如果结束
其他的

用于此范围
范围(“DB”)。文本
未指定要使用的工作表。因此,这可能是代码有时有效有时无效的原因。有时可能会使用错误的工作表。确保工作表中的所有对象也有对工作表的引用请注意,除非你能找出哪里出了问题并能够重现,否则很难为你提供帮助。你需要用F8一步一步地调试你的代码,看看在出错的情况下会发生什么。非常感谢你的时间。我将添加对工作表的引用并让您知道。我尝试了几次重新创建该问题,但未能成功。我不认为问题在于范围(“DB”).Text。第一个For循环中的2个立方体被更新,IF块的第二个For循环中的另外2个立方体没有更新。代码的其余部分看起来没有错(至少没有明显的错误)。因此,找出问题所在的唯一方法可能是调试代码。用F8一步一步地检查它。使用鼠标将其固定在活动行的变量上,以查看值(如果这是您期望的值),或使用本地窗口调查变量。这样你就可以发现哪里出了问题(而不是你所期望的)。确保使用
选项Explicit
并声明所有变量,以防止可能看不到的打字错误。当我调试代码时,控件在代码中的流动完全没有问题。这个问题很少发生,也不总是发生。