2012-11-26 76 views
0

Iam a DB Guy和我不知道VB的任何内容。 我有一个宏在Excel和Excel中我有交叉表格记录。 我的宏会将Crosstabular记录转换为表格记录。 但我的要求是我想在Excel以外运行相同的宏。 .VBS文件应该在那里,每当我们运行.VBS时,它应该从某个地方选择excel,并将交叉表记录转换为表格记录并保存在某个不同的位置。 我已经创建了一个代码相同的谷歌搜索和有人请检阅我的下面的代码,并帮助我与正确的代码。如何在不使用Excel的情况下运行宏

Sub RunMacro() 

Dim xlApp 'As Excel.Application 

Dim xlBook 'As Workbook 

Dim xlSheet 'As Worksheet 

Dim wsCrossTab 'As Worksheet 

Dim wsList 'As Worksheet 

Dim iLastCol 'As Long 

Dim iLastRow 'As Long 

Dim iLastRowList 'As Long 

Dim rngCTab 'As Range 'Used for range in Sheet1 cross tab sheet 

Dim rngList 'As Range 'Destination range for the list 

Dim I 'As Long 


Set xlApp = CreateObject("Excel.Application") 

Set xlBook = xlApp.Workbooks.Open("D:\Source.xls") 

CrossTabToList() 

xlBook.SaveAs "D:\Results.xls" 

xlApp.Quit 

End Sub 

Sub CrossTabToList() 

Set wsCrossTab = Worksheets("Tabular") 

Set wsList = Worksheets.Add 


'Find the last row in Sheet1 with the cross tab 

iLastRow = wsCrossTab.Cells(Rows.Count, "A").End(xlUp).Row 

'Set the initial value for the row in the destination worksheet 

iLastRowList = 2 

'Find the last column in Sheet1 with the cross tab 

iLastCol = wsCrossTab.Range("A8").End(xlToRight).Column 

'Create a new sheet and set the heading titles 

wsList.Range("A1:C1") = Array("CATEGORY", "SUBCATEGORY", "VALUE") 

'Start looping through the cross tab data 

For I = 2 To iLastRow 

Set rngCTab = wsCrossTab.Range("A" & I) 'initial value A2 

Set rngList = wsList.Range("A" & iLastRowList) 'initial value A2 

'Copy individual names in Col A (A2 initially) into as many rows as there are data columns in the cross tab (less 1 for Col A). 

rngCTab.Copy rngList.Resize(iLastCol - 1) 

'Move up a I rows less one and across one column (using offset function) to select heading row. Copy. 

rngCTab.Offset(-(I - 1), 1).Resize(, iLastCol - 1).Copy 

'Paste transpose to columns in the list sheet alongside the names 

rngList.Offset(0,1).PasteSpecial Transpose:=True 

'Staying on same row (2 initially) copy the data from the cross tab 

rngCTab.Offset(, 1).Resize(, iLastCol - 1).Copy 

'Past transpose as column in list sheet 

rngList.Offset(0, 2).PasteSpecial Transpose:=True 

'Set the new last row in list sheet to be just below the last name copied 

iLastRowList = iLastRowList + (iLastCol - 1) 

'increment I by 1 

Next I 


Application.DisplayAlerts = False 

Sheets("Tabular").Select 

ActiveWindow.SelectedSheets.Delete 

Application.DisplayAlerts = True 

Sheets("Sheet1").Select 

Sheets("Sheet1").Name = "Results" 

objwkbk.SaveAs "D:\Results.xls" 


End Sub 

感谢,

普利文


正如我提到我不是一个Java开发或编码的家伙,我是一个数据库的人,我不知道关于Java的东西。我想使用上面的代码作为.VBS文件。我想要有人纠正我的上面的代码,以便在.VBS文件中使用它。如果你可以这样做,它将非常感激。 在此先感谢。

+0

当您尝试运行此代码会发生什么?什么错误信息(如果有的话),你会得到什么。当你运行Excel时,Excel如何运作? –

回答

0

这是一个非常好的主意。 Excel文件中的VBA可能会让用户感到困惑,因此我尽可能避免这种情况。

我建议将您的过程存储在Access文件中。有参与其转换一点的工作,但是这应该让你开始:

  1. 让DB
  2. 一个新的Access在您的新的数据库,使一个新的VBA 模块。将代码粘贴在那里。
  3. 添加最新版本的Microsoft Excel对象库
  4. 做出各种其他的变化是必要的获得再次合作的顺序码(你必须做一些试验和错误的,与错误信息反复运行代码和处理,因为他们弹出)
  5. 变化您功能(你需要做这从宏观称呼它)
  6. 创建一个新的。添加动作RunCode与参数RunMacro()

在未来,所有你需要做的就是打开数据库,并单击宏运行的代码。

+0

正如我所提到的,我不是Java开发人员或编码人员,我是一个数据库人员,我不知道任何有关Java的信息。我想将上面的代码用作.VBS文件。我想要有人更正我的上述代码以使用它在一个.VBS文件。如果你能做到这一点,将非常感激。提前致谢。 – praveen1108

+0

啊,在这种情况下,我不能有太大的帮助。祝你好运。 – PowerUser

相关问题