您的位置:首页 > 编程语言 > VB

vba中text的问题和VBA自动调用的问题

2015-12-19 18:33 447 查看
问题:vba中text与value?

补充:

excel2013 中,可以运算的值和显示值。

我想凡是单元格数值为3,就显示为B

if [a1].value=3 then

[a1].text="B" 

end if    

运行时,出现424错误,“要求对象”的提示。怎么回事?

后改为:

If [a1] = 3 Then

 [a1].NumberFormatLocal = "b"

end if

但是,这个单元格就出现显示值为43,value值1900/1/5

又改为:

If [a1] = 3 Then

 [a1].NumberFormatLocal = "B"

end if

运行时,出现1004错误,不能设置range的NumberFormatLocal属性。怎么回事?

回答:

将这句改成下面的格式试一下:

[a1].NumberFormatLocal = """B"""

问题2:VBA自动调用另一张表中满足某些条件的单元格的数据?

补充:

在sheet1表中的A1和A2单元格分别输入数据,自动在sheet2表中寻找与该数据一致的单元格(例如sheet2的A1和B1),并将该单元格所在的行中指定的某些单元格(例如sheet2的C1和D1)的数据赋予sheet1表的C1和D1单元格。

回答:

1.首先定义个过程,做到通用

Private Sub FindAndCopy(ByRef iSoureRange As Range, iTargetSheet As Worksheet, iTargetRange As Range)

        'iSoureRange 代表需要查找数据的单元格,比如楼主栗子中的Sheet1中A1 单元格

        'iTargetSheet 代表需要查找数据的表格,比如楼主栗子中的Sheet2

        'iTargetRange 代表需要复制数据的单元格,比如楼主栗子中的Sheet1中的C1单元格

        Dim iRange As Range '临时变量

        If iSoureRange Is Nothing Or iTargetSheet Is Nothing Or iTargetRange Is Nothing Then Exit Sub '三个参数必须指定对象,否则直接退出

        Set iRange = iTargetSheet.UsedRange.Find(iSoureRange.Value, LookAt:=xlWhole) '查找目标表格中是否存在数据

        If Not iRange Is Nothing Then '找到数据

            iTargetRange.Value = iRange.Value '复制数据到目标单元格,此处仅复制数值,不复制格式等信息

        Else

            MsgBox "表格< " & iTargetSheet & " >中未能查找扫到数据 < " & iSoureRange.Value & " >!" '未能查找到则报错

        End If

End Sub

2. 创建调用前一个过程的代码,比如在Sheet1中创建一个按钮,编辑以下代码:

Private Sub CommandButton1_Click()

    Call FindAndCopy(ActiveSheet.Range("A1"), ThisWorkbook.Sheets("Sheet2"), ActiveSheet.Range("C1"))

End Sub

补充:看到楼主给其他人的补充说明,原来是这样,那就要将上面的代码改一改了。

1.首先定义个过程,做到通用

Private Sub FindAndCopy(ByRef iSoureRange As Range, iTargetSheet As Worksheet, iTargetRange As Range)

        'iSoureRange 代表需要查找数据的单元格,比如楼主栗子中的Sheet1中A1 单元格

        'iTargetSheet 代表需要查找数据的表格,比如楼主栗子中的Sheet2

        'iTargetRange 代表需要复制数据的单元格,比如楼主栗子中的Sheet1中的C1单元格

        Dim iRange As Range, TempRange As Range  '临时变量

        If iSourceRange Is Nothing Or iTargetSheet Is Nothing Or iTargetRange Is Nothing Then Exit Sub '三个参数必须指定对象,否则直接退出

        Set iRange = iTargetSheet.Range("A1").End(xlDown)'找到A列最后一行单元格

        Set iRange = iTargetSheet.Range("$A$1:$A$" & iRange.Row)'获取在目标表格中A列的单元格区域

        For Each TempRange In iRange '遍历目标表格中的A列单元格

            If TempRange.Value = iSourceRange.Value And TempRange.Offset(0, 1).Value = iSourceRange.Offset(0, 1).Value Then'比较两列数据,如果A和B列均和查找数据的两列相等

                iTargetRange.Value = TempRange.Value'则分别复制到目标单元格的两列

                iTargetRange.Offset(0, 1).Value = TempRange.Offset(0, 1).Value

                Exit For'找到第一个后退出循环,避免耗费过长时间,也意味着目标表格中不能存在重复值,如果存在重复值,就始终只找到第一个

            End If

        Next TempRange

End Sub

2. 创建调用前一个过程的代码,比如在Sheet1中创建一个按钮,编辑以下代码:

Private Sub CommandButton1_Click()

    Call FindAndCopy(ActiveSheet.Range("A1"), ThisWorkbook.Sheets("Sheet2"), ActiveSheet.Range("C1"))

End Sub
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息