从另一个工作簿中为String分配值

时间:2014-04-28 15:27:20

标签: excel vba excel-vba

我正在尝试将另一个工作簿中的单元格中的值分配给代码中的字符串变量。

所以目前我的代码会查找工作簿中的P,G,H,I列,但是我创建了另一个工作簿,我已经输入了我需要它查找的所有列。所以在其他工作簿上我已将其映射出来,因此Ship to site ID值为P但我无法锻炼如何将此工作簿中的值分配给下面的代码。

我想要它所以我可以只更改映射工作簿中的值,而不必每次都有更改时返回我的编码并更改列函。

ShipToSiteID = Application.WorksheetFunction.Trim(Range("P" & counter))
AltShipTo1 = Application.WorksheetFunction.Trim(Range("G" & counter))
AltShipTo2 = Application.WorksheetFunction.Trim(Range("H" & counter))
AltShipToCity = Application.WorksheetFunction.Trim(Range("I" & counter))

2 个答案:

答案 0 :(得分:1)

当您使用Range("P" & counter)时,这将引用ActiveWorksheet

所以它与ActiveWorksheet.Range("P" & counter)

相同

如果要引用其他工作簿,则需要使用此工作簿中的工作表范围。

Sub test()

Dim newWorkbook As Workbook
Dim newWorksheet As Worksheet

'NewWorkbook.xlsm is already open
Set newWorkbook = Workbooks("NewWorkbook.xlsm")
Set newWorksheet = newWorkBook.Worksheets("Sheet1")

MsgBox "This value is A1 in NewWorkbook - " & newWorksheet.Range("A1").Value

End Sub

您还可以按索引获取一个打开的工作簿(虽然这不是真的推荐)。

Set newWorkbook = Workbooks(1)

您可以使用Workbook.Open

同时获取并打开工作簿
Set newWorkbook = Workbooks.Open("C:/Path/To/Workbook")

或者使用Workbook.Add

获取并添加新工作簿
Set newWorkbook = Workbooks.Add()

另外,关于您对Application.WorksheetFunction.Trim

的使用情况

内置的VBA Trim()功能更适合..

答案 1 :(得分:0)

我不完全确定您是如何尝试从一个工作簿复制到另一个工作簿的,但下面的代码是从另一个工作簿中获取特定单元格数据的一般方法。

Sub GetOtherValues()
    Dim thisWS As Worksheet
    Dim thatWS As Worksheet
    Dim thatWB As Workbook
    Dim ShipToSiteID As String
    Dim counter As Integer

    Set thisWS = ActiveSheet
    Set thatWB = Workbooks.Open("C:\demo.xlsx")
    Set thatWS = thatWB.Worksheets(1)

    counter = 2 'initialized here for the sake of code completeness

    ShipToSiteID = Trim(thatWS.Range("P" & counter))

    'Do something else with the trimmed data from ShipToSiteID 
    thisWS.Cells(2, 2) = ShipToSiteID 

    thatWB.Close
End Sub

此代码假定您从当前工作簿运行,并且需要另一个工作表/工作簿来获取数据。声明变量后,它会将thisWB指定为当前工作表,然后打开下一个工作簿并将第一个工作表分配给thatWS。我们现在可以使用thatWScounter变量来复制和修剪数据,并将其粘贴到变量ShipToSiteID中(然后执行其他任何需要处理的操作) 。