Excel 多维数据集写回表有时不更新
下面是我的代码。此代码将检查2列中的值并更新多维数据集/写回表。 大多数情况下,所有4个多维数据集/写回表都会更新。非常罕见的是,财务多维数据集(If块循环的第二个)并没有更新。我无法重现问题,也无法找出问题的确切位置,因为大多数情况下都会发生更新。 非常感谢您的帮助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
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
并声明所有变量,以防止可能看不到的打字错误。当我调试代码时,控件在代码中的流动完全没有问题。这个问题很少发生,也不总是发生。