Excel 2003(VBA)-自定义标识符/函数/UDF

Excel 2003(VBA)-自定义标识符/函数/UDF,vba,excel-2003,Vba,Excel 2003,我目前正在为我的工作重写一个小型股票系统,并试图加快程序的速度,因为它的速度非常慢,我现在只做了两个星期的VBA 在Excel 2003版中 我的问题(我认为)是创建一个标识符 我有两个,它们如下: Dim QuickView As String QuickView = ActiveWorkbook.Range("a1:c200").Copy Dim Stock As String Stock = ActiveWorkbook.Range("c1:c200").Cop

我目前正在为我的工作重写一个小型股票系统,并试图加快程序的速度,因为它的速度非常慢,我现在只做了两个星期的VBA

在Excel 2003版中

我的问题(我认为)是创建一个标识符

我有两个,它们如下:

   Dim QuickView As String
   QuickView = ActiveWorkbook.Range("a1:c200").Copy


   Dim Stock As String
   Stock = ActiveWorkbook.Range("c1:c200").Copy
我的用户当前从打开的对话框中选择一个文件(工作簿),我正在导入指定范围内的数据

然而,当我调用这些函数时,我得到“对象不支持此属性或方法”


我不确定这是否应该是一个自定义项,因为我看不到任何地方可以编写自己的VBA函数,而不是在VBA中编写供Excel使用的函数。

在您的两个示例中,“QuickView”和“Stock”都应该是变体,而不是字符串

Dim Stock As Variant
Stock = ActiveWorkbook.Range("c1:c200").Copy
请记住,为了将单元格值复制(或剪切)到另一个位置,不需要为变量指定范围。相反,您可以这样做:

ActiveWorkbook.Sheets("Sheet1").Range("c1:c200").Copy
ThisWorkbook.Sheets("Sheet1").range("c1")
惯例是从[空间]复制,把它放在这里


注意:在上面的示例中,这些值将复制到包含运行代码的工作簿的
Sheet1
。运行VBA的工作簿始终是
ThisWorkbook

,正如@timbur所说,您可以复制一个范围,而无需先指定它。如果要分配它,变量必须是Range(或Variant)类型,并且必须使用Set进行分配,就像任何对象分配一样

Dim stock as Range  'or Variant, but Range is better
Set stock =  ActiveWorkSheet.Range("c1:c200")
'copy, and optionally paste at once
stock.Copy Destination:=ThisWorkbook.Sheets("Sheet1").range("c1")

伙计们,谢谢你们的回答:-D

Sub Button1_Click()

Dim FileOpened As Boolean ' Holds True or False value
Dim SourceRange As Range
Dim TargetRange As Range
Dim MasterWorkbook As Workbook
Dim Row As Integer

' Remember the current workbook we are clicking the button from.
Set MasterWorkbook = ActiveWorkbook ' Use Set =  for all complex types.

' Identify file to open.
ChDrive "C:"
ChDir "c:\"

On Error Resume Next ' Temporarily ignore errors in situation when user says no to         opening the same master file a second time.
FileOpened = Application.Dialogs(xlDialogOpen).Show
On Error GoTo 0 ' Reinstates normal error reporting.

' Don't process the file if the user cancels the dialog.
If FileOpened Then

    ' The opened file automatically becomes the new active workbook and active worksheet.
Set SourceRange = ActiveSheet.Range("c1:c394")

Set TargetRange = MasterWorkbook.ActiveSheet.Range("b1:b394")

' Copy cell values one at a time from the source range to the target range.
For Row = 1 To 394
    TargetRange.Cells(Row, 1).Value = SourceRange.Cells(Row, 1).Value
Next

ActiveWorkbook.Close

' Set background colour of target range.
TargetRange.Select
With Selection.Interior
    .ColorIndex = 6
    .Pattern = xlSolid
End With


' Tell Excel to recalculate only those formulas which use the target values.
TargetRange.Dirty

End If

End Sub
对于对此代码感兴趣的用户:

用户从指定目录中选择一个文件,然后从该文件中选择指定范围“c1:c394”,并将其传递到“sheet1”中


绕过剪贴板并更新受添加值影响的任何公式

您的代码并不清楚您到底想做什么,因此您需要添加更多的细节。如果试图从每个范围获取数据,则需要将变量声明为
变量
,并使用
.Value
而不是
.Copy
。这将在每种情况下为您提供一个二维数组(即使您的第二个范围只有一列)。在第一个代码示例中,
范围(“c1:c200”)
之后的
.Copy
部分不相关,应该删除<代码>工作簿没有
范围
方法,因此
活动工作簿
应替换为
活动工作表
,或者更好地,替换为对特定工作表的引用。我在回答中整理了一个明显的打字错误,
工作簿中没有
范围
成员
,因此这里需要
工作表
参考