2016-02-26 45 views
0

我目前有一個工作簿,其中引用了另一個每小時更新一次的工作簿。我有宏使用查找和替換功能將單元格引用更改爲另一組數據。問題是查找和替換遍歷所有需要很長時間的單元。我的想法是定義一個函數,返回一個新的單元格ref,但是我一直未能在任何幫助下工作都會感激不盡。這是我迄今爲止用於返回單元格引用的VBA函數

Public Function test(cel) As Range 
Dim celvar As Integer 
celvar = cel 
var1 = "=('\\server\folder1\folder2\folder3\folder4\[workbook.xlsx]" 
var2 = Range("I2").Value 
var3 = "'!$B" 
var4 = ")" 
test = var1 & var2 & var3 & celvar & var4 
End Function 

了我會叫的靶細胞的功能,像這樣 =測試(151),並使其返回 =('\服務器\文件夾1 \文件夾2 \ folder3 \ folder4 [workbook.xlsx]表'!$ B153)

unforfunatly它returnes要麼#REF或#VALUE

+0

你是什麼意思的「更改單元格引用另一組數據」?另外,您的問題是由整個參考字符串的括號引起的嗎?我不認爲這是必要的。 – teepee

+0

例如我想動態更改('\ server \ folder1 \ folder2 \ folder3 \ folder4 [workbook.xlsx]工作表'!$ B153)到 – Bigjim

+0

,而不是實例j153 – Bigjim

回答

0

不知道你想實現這一目標是困難的什麼,但我可以看到你的功能設置當你的連接創建一個字符串時返回一個範圍。我也會指定你期望的變量類型,這是一個基於你對cel的使用的整數,所以確保你發送一個整數給函數,最後確保你正在設置cell.formula到你的測試中字符串,而不是cell.value

Public Function test(cel as integer) As string 
var1 = "=('\\server\folder1\folder2\folder3\folder4\[workbook.xlsx]" 
var2 = Range("I2").Value 
var3 = "'!$B" 
var4 = ")" 
test = var1 & var2 & var3 & cel & var4 
End Function 

然而,當您使用的功能爲在細胞功能,我希望這將只是把輸出作爲一個字符串,而不是一個公式,所以你可能需要還添加了一些東西來評估細胞 - 也許cellnexttothisone.formula = thiscell.value

+0

yes是一個單元格函數。基本思想是我有全局變量var 1-4由於其他宏而頻繁變化的想法是動態地改變var 2和3的單元格ref,從而立即更新所有單元格ref。而不是使用查找和替換,這是不方便的,因爲它需要60秒,在這種情況下,數據不再是當前的。 – Bigjim

+0

您需要在函數中使用一行,如currentrange = Application.Caller,爲您提供當前單元格,然後SheetName = Application。 Caller.Worksheet.Name給你當前工作表。然後表(sheetname).range(currentrange).offset(1,0).formula = sheets(sheetname).range(currentrange).value。這會將新字符串作爲原始單元格中的值,並將公式版本放入下一個單元格中,這將從您的外部工作簿中提取詳細信息。 – ninjaRoche

相關問題