VBA -有问题的代码到多个工作表和更新表



我正在从数据库中提取数据。为了得到一些有用的东西,我不得不将很多数据分开并重新组合起来,因为数据库的初始输入很差,或者数据库传输软件重复了不应该重复的信息。我遇到的许多问题之一是在多个(2)页上运行修剪命令。我可以在我的命令按钮很好的初始表上运行代码,但我有问题让它也在单独的工作表上运行。我也有问题,让我的表,power pivot和我的pivot表以正确的顺序更新。

代码:

Private Sub CommandButton1_Click()
Range("b1:b5").Select
Application.Run "SSGenALLQueryDetail"
Dim r As Range
Set r = Intersect(Range("E1").EntireColumn, ActiveSheet.UsedRange)
r.Value = Evaluate("IF(ROW(" & r.Address & "),IF(" & r.Address & "<>"""",TRIM(" & r.Address & "),""""))")
ActiveWorkbook.RefreshAll
Worksheets("JC by Phase and Cost Type").Activate
End Sub

应用程序更新表,并且运行良好。

需要修剪的两列都在e列中。整个列必须修剪。这是我想在当前工作表(称为"项目数据表")和工作表"数据表":

上运行的代码部分。
Dim r As Range
Set r = Intersect(Range("E1").EntireColumn, ActiveSheet.UsedRange)
r.Value = Evaluate("IF(ROW(" & r.Address & "),IF(" & r.Address & "<>"""",TRIM(" & r.Address & "),""""))")

最后,activeworkbook.refreshall"命令是更新我的功率透视表和透视表。有时它工作,有时不取决于我正在尝试的代码(相信我,我已经尝试了很多)。我更喜欢用它,因为它很简单。首先我得更新我的数据透视表。然后我有2个独立的工作表透视表,1必须在另一个之前更新。第一个需要更新的是工作表上的ActualUnit adjust第二个必须是"阶段和成本类型"的JC。之后有几个带有图表的工作表,但这些工作表可以按任何顺序更新。

我尝试选择多个工作表并在选定的工作表上运行代码,我尝试使用选定工作表的数组。我很可能只是把代码弄乱了,因为我没有接受过正式的培训,这些都是谷歌搜索的代码,我把它们拼凑在一起,希望它能工作。

任何帮助都将是非常感激的。

这是未经测试的,但应该指向正确的方向。

阅读代码的注释并调整它以适应你的需要。

让我知道进展如何

Private Sub CommandButton1_Click()

' Run a procedure (you can use just SSGenALLQueryDetail without quotes or anything else if the procedure is declared as public)
Application.Run "SSGenALLQueryDetail"

' Declare and set a target sheet
Dim targetSheet As Worksheet
Set targetSheet = ThisWorkbook.Worksheets("TargetSheetName") ' <- Replace TargetSheetName with the sheet name

' Declare and set the range you're going to work with
Dim targetRange As Range
Set targetRange = Intersect(targetSheet.Range("E1").EntireColumn, targetSheet.UsedRange)

' Return trimmed value
targetRange.Value = Evaluate("IF(ROW(" & targetRange.Address & "),IF(" & targetRange.Address & "<>"""",TRIM(" & targetRange.Address & "),""""))")

' Check if you need to refresh the active workbook or the workbook running the code (if the latter, use ThisWorkbook
ThisWorkbook.RefreshAll

' Activate a sheet in the workbook running the code
ThisWorkbook.Worksheets("JC by Phase and Cost Type").Activate
End Sub

下面的内容可能有助于解决问题的第一部分

Public Sub TryThis()
FixAnySheet ThisWorkbook.Sheets("Item Data Sheet")
FixAnySheet ThisWorkbook.Sheets("Data Sheet")
End Sub
Public Sub FixAnySheet(dSht As Worksheet)
dSht.Range("b1:b5").Select
Application.Run "SSGenALLQueryDetail"

Dim r As Range

Set r = Intersect(Range("E1").EntireColumn, dSht.UsedRange)
r.Value = Evaluate("IF(ROW(" & r.Address & "),IF(" & r.Address & "<>"""",TRIM(" & r.Address & "),""""))")
ActiveWorkbook.RefreshAll
Worksheets("JC by Phase and Cost Type").Activate
End Sub

在FixAnySheet例程

中,您自己的代码只有2处更改。add Later:使用。select不是最佳实践,而且很可能在FixAnySheet的第一行导致问题。您可能需要在FixAnySheet中添加新的第一行,如下所示

dSht.Activate

可能会在代码的其他地方导致问题

我正在做的是试图用锤子打螺丝。我没有将修剪函数放入vba代码中,而是将修剪函数放入表中。我用来从数据库中拉入数据的程序允许我在表的末尾维护公式。这解决了我大部分的问题。一旦我的命令按钮中有了额外的代码,刷新工作簿就可以完美地工作了。有时候越简单越好。我想给你看一张照片,但我还没被允许。结果真的很好,这里的人给了我方向,我需要努力完成它,得到一个专业的、易于使用的报告。

最新更新