Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将值转换为LBS-Excel VBA_Vba_Excel - Fatal编程技术网

将值转换为LBS-Excel VBA

将值转换为LBS-Excel VBA,vba,excel,Vba,Excel,我尝试使用以下代码将不同单位的数字转换为LBS: 我不知道下面这个简单的代码有什么问题,但它没有给出任何输出: 数据为表格格式,前两行已冻结 截图附在下面 Option Explicit Sub ConvertToLBS() Application.ScreenUpdating = False Dim wk As Worksheet Dim str As String Dim i As Long Dim strq, strs As Double

我尝试使用以下代码将不同单位的数字转换为LBS:

我不知道下面这个简单的代码有什么问题,但它没有给出任何输出:

数据为表格格式,前两行已冻结

截图附在下面

Option Explicit

Sub ConvertToLBS()
    Application.ScreenUpdating = False

    Dim wk As Worksheet
    Dim str As String
    Dim i As Long
    Dim strq, strs As Double
    Dim FinalRow As Long
    Set wk = Sheets(1)
    FinalRow = wk.Range("B900000").End(xlUp).Row

        For i = 2 To FinalRow

            str = wk.Range("R" & i).Text
            str = Trim(str)

            strq = wk.Range("Q" & i).Value

            If str = "POUNDS" Then
                strs = strq * 1
                wk.Range("S" & i).Value = strs
            Else: End If

        If str = "YARDS" Then
            strs = strq * 1688.55
            wk.Range("S" & i).Value = strs
        Else: End If

        If str = "KILOGRAMS" Then
            strs = strq * 2.20462
            wk.Range("S" & i).Value = strs
        Else: End If

        If str = "TONS" Then
            strs = strq * 2000
            wk.Range("S" & i).Value = strs
        Else: End If

        If str = "GALLONS" Then
            strs = strq * 8.34
            wk.Range("S" & i).Value = strs
        Else: End If

    Next i
    Application.ScreenUpdating = True
End Sub

我相信你的如果。。。其他的都被弄脏了;可能是那些冒号试图速记代码。我建议换成一个新的。它们实际上是为这样的条件检查而设计的

Sub ConvertToLBS()
    Application.ScreenUpdating = False

    Dim wk As Worksheet
    Dim str As String
    Dim i As Long, FinalRow As Long
    Dim strq As Double, strs As Double

    Set wk = Sheets(1)

    With wk
        FinalRow = .Range("B" & .Rows.Count).End(xlUp).Row

        For i = 2 To FinalRow
            str = Trim(UCase(.Range("R" & i).Text))
            strq = .Range("Q" & i).Value
            strs = 0

            Select Case str
                Case "POUNDS"
                    strs = strq * 1
                Case "YARDS"
                    strs = strq * 1688.55
                Case "KILOGRAMS"
                    strs = strq * 2.20462
                Case "TONS"
                    strs = strq * 2000
                Case "GALLONS"
                    strs = strq * 8.34
                Case Else
                    'do nothing; not covered
                    Debug.Print str
            End Select
            .Range("S" & i) = strs
        Next i
    End With

    Application.ScreenUpdating = True

End Sub

我相信你的如果。。。其他的都被弄脏了;可能是那些冒号试图速记代码。我建议换成一个新的。它们实际上是为这样的条件检查而设计的

Sub ConvertToLBS()
    Application.ScreenUpdating = False

    Dim wk As Worksheet
    Dim str As String
    Dim i As Long, FinalRow As Long
    Dim strq As Double, strs As Double

    Set wk = Sheets(1)

    With wk
        FinalRow = .Range("B" & .Rows.Count).End(xlUp).Row

        For i = 2 To FinalRow
            str = Trim(UCase(.Range("R" & i).Text))
            strq = .Range("Q" & i).Value
            strs = 0

            Select Case str
                Case "POUNDS"
                    strs = strq * 1
                Case "YARDS"
                    strs = strq * 1688.55
                Case "KILOGRAMS"
                    strs = strq * 2.20462
                Case "TONS"
                    strs = strq * 2000
                Case "GALLONS"
                    strs = strq * 8.34
                Case Else
                    'do nothing; not covered
                    Debug.Print str
            End Select
            .Range("S" & i) = strs
        Next i
    End With

    Application.ScreenUpdating = True

End Sub

正如评论中所建议的那样:

Option Compare Text
Option Explicit

Sub ConvertToLBS()
    Application.ScreenUpdating = False

    Dim wk As Worksheet
    Dim str As String
    Dim i As Long
    Dim strq, strs As Double
    Dim FinalRow As Long
    'Set wk = Sheets(1)
    Set wk = Sheets("BR Mailing List_12-4-15 (3)")
    FinalRow = wk.Range("R" & wk.Rows.Count).End(xlUp).Row

    For i = 2 To FinalRow
        str = Trim(wk.Range("R" & i).Value)
        strq = CDbl(wk.Range("Q" & i).Value)
        Select Case str
            Case Is = "POUNDS"
                strs = strq * 1
            Case Is = "YARDS"
                strs = strq * 1688.55
            Case Is = "KILOGRAMS"
                strs = strq * 2.20462
            Case Is = "TONS"
                strs = strq * 2000
            Case Is = "GALLONS"
                strs = strq * 8.34
        End Select
        wk.Range("S" & i).Value = CDbl(strs)
    Next i
    Application.ScreenUpdating = True
End Sub

正如评论中所建议的那样:

Option Compare Text
Option Explicit

Sub ConvertToLBS()
    Application.ScreenUpdating = False

    Dim wk As Worksheet
    Dim str As String
    Dim i As Long
    Dim strq, strs As Double
    Dim FinalRow As Long
    'Set wk = Sheets(1)
    Set wk = Sheets("BR Mailing List_12-4-15 (3)")
    FinalRow = wk.Range("R" & wk.Rows.Count).End(xlUp).Row

    For i = 2 To FinalRow
        str = Trim(wk.Range("R" & i).Value)
        strq = CDbl(wk.Range("Q" & i).Value)
        Select Case str
            Case Is = "POUNDS"
                strs = strq * 1
            Case Is = "YARDS"
                strs = strq * 1688.55
            Case Is = "KILOGRAMS"
                strs = strq * 2.20462
            Case Is = "TONS"
                strs = strq * 2000
            Case Is = "GALLONS"
                strs = strq * 8.34
        End Select
        wk.Range("S" & i).Value = CDbl(strs)
    Next i
    Application.ScreenUpdating = True
End Sub


您应该使用
Select Case
而不是大量的
If
,以便更好地编码和可读性。您是否使用断点来查看代码是如何工作的?您可以在模块顶部添加
选项Compare Text
,以避免由于字符串大写(大小写)而导致测试失败!您已将第一个工作表分配给变量
wk
Set wk=Sheets(1)
。在所附的屏幕上,我可以看到数据在第二张工作表中。因此,将此行更改为
Set wk=Sheets(2)
。或者最好按名称分配:
Set wk=Sheets(“BR mailling List_12-4-15(3)”)
@mielk不,这是第一张工作表,只是我在BR\u邮寄后创建了
控件
工作表。。。Sheet@RohanK:Mkay,您可能会混淆两种不同类型的图纸引用<代码>工作表(1)和
工作表1
是截然不同的事情,
工作表(1)
将是底部功能区左侧的第一张工作表,
工作表1
将是您创建的第一张工作表,请参见:我在回答中包括了工作表的名称,我将它留给您来更正,以便在它正常工作后将其应用到正确的工作表中。您应该使用
选择大小写
,而不是大量的
If
,以便更好地编码和可读性。您是否使用断点来查看代码是如何工作的?您可以在模块顶部添加
选项Compare Text
,以避免由于字符串大写(大小写)而导致测试失败!您已将第一个工作表分配给变量
wk
Set wk=Sheets(1)
。在所附的屏幕上,我可以看到数据在第二张工作表中。因此,将此行更改为
Set wk=Sheets(2)
。或者最好按名称分配:
Set wk=Sheets(“BR mailling List_12-4-15(3)”)
@mielk不,这是第一张工作表,只是我在BR\u邮寄后创建了
控件
工作表。。。Sheet@RohanK:Mkay,您可能会混淆两种不同类型的图纸引用<代码>工作表(1)和
工作表1
是截然不同的事情,
工作表(1)
将是底部功能区左侧的第一张工作表,
工作表1
将是您创建的第一张工作表,请参见:我在回答中包括了工作表的名称,我把它留给你去纠正,一旦它正常工作,就把它应用到正确的工作表上。我试过你的代码,我不认为有什么问题,但它不工作。我没有得到任何输出。我附上了数据的屏幕截图。Q列中的数字是看起来像数字的文本。这就是为什么它们都被标记为潜在错误的原因。选择列Q并设置为常规单元格编号格式,然后运行数据、文本到列、固定宽度、Finish.Ohh。。是的,是文本。谢谢,我会尽快做的我试过你的代码我不认为有什么问题,但它不起作用我没有得到任何输出我已经附上了数据的屏幕截图。Q列中的数字是看起来像数字的文本。这就是为什么它们都被标记为潜在错误的原因。选择列Q并设置为常规单元格编号格式,然后运行数据、文本到列、固定宽度、Finish.Ohh。。是的,是文本。谢谢,我会尽快做的,但它不起作用。请看问题中附带的屏幕截图。@RohanK:好的,我看到了屏幕截图,但我不明白这怎么不起作用(因为我在阅读Q列时已经包括了
CDbl
)?你能再详细一点吗?有错误吗?S列中是否有输出?这是错误的吗?谢谢,我的工作表有两个主要问题,第一个是Q列中的数据格式不正确,其中一些是文本,第二个是正如你所说的
Sheet1
Sheets(1)
之间的区别,好的,但是正如我所说的,当我使用
CDbl()
;)转换数据时,格式化为文本的数据与我的建议没有问题不,它必须是一个数字才能转换成双精度码。我认为你不能将文本转换成双精度码,因为如果它是
34678
而不是
34678
,它会给我一个
类型不匹配错误
对不起,它不起作用,请看问题中附带的屏幕截图。@RohanK:好的,我看到了屏幕截图,但我不明白这怎么不起作用(因为我在阅读Q列时已经包括了CDbl)?你能再详细一点吗?有错误吗?S列中是否有输出?这是错误的吗?谢谢,我的工作表有两个主要问题,第一个是Q列中的数据格式不正确,其中一些是文本,第二个是正如你所说的
Sheet1
Sheets(1)
之间的区别,好的,但是正如我所说的,当我使用
CDbl()
;)转换数据时,格式化为文本的数据与我的建议没有问题不,它必须是一个数字才能转换为双精度。我不认为您可以将文本转换为双精度,因为如果它是
34678
而不是
34678
,则会出现
类型不匹配错误