2016-07-05 69 views
0

我有用于更改形状大小的VBA代码,但是我想将数字转换为cm。有关如何转换这些数字的任何建议?
另一个问题是,我想改变多个选定形状的相同大小;你能帮我解决这个问题吗?将形状大小转换为cm

非常感谢!

Sub test() 
    Dim objHeigh As Integer 
    Dim objWidth As Integer 
    Dim oSh As Shape 

    On Error GoTo CheckErrors 

    With ActiveWindow.Selection.ShapeRange 
     If .Count = 0 Then 
      MsgBox "You need to select a shape first" 
      Exit Sub 
     End If 
    End With 

    For Each oSh In ActiveWindow.Selection.ShapeRange 
     objHeigh = oSh.Height 
     objWidth = oSh.Width 

     objHeigh = CInt(InputBox$("Assign a new size of Height", "Heigh", objHeigh)) 
     ' give the user a way out 
     If objHeigh = 0 Then 
      Exit Sub 
     End If 

     If objName <> "" Then 
      oSh.Name = objName 
     End If 

     objWidth = CInt(InputBox$("Assign a new size of Width", "Width", objWidth)) 
     ' give the user a way out 
     If objWidth = 0 Then 
      Exit Sub 
     End If 

     oSh.Height = CInt(objHeigh) 
     oSh.Width = CInt(objWidth) 
    Next 
    Exit Sub 

    CheckErrors: MsgBox Err.Description 
End Sub 

回答

3

根据MSDN,相应的形状属性的高度/宽度在点指定:

返回或设置指定对象的高度,以点。 可读/写。

和它们具体示出的示例,并且参照该事实该网页上,一个1英寸具有72点

此示例中指定的表设定该高度为两个行至100个 点(每英寸72点)。

所以我想这是安全的依靠这个事实,只是写一个函数,自己进行转换:

Function ConvertPointToCm(ByVal pnt As Double) As Double 
    ConvertPointToCm = pnt * 0.03527778 
End Function 

Function ConvertCmToPoint(ByVal cm As Double) As Double 
    ConvertCmToPoint = cm * 28.34646 
End Function 

至于与上浆多个对象你的问题而言,我我不确定我是否完全理解你的问题。我解释它的方式,使您的移动提示用户从For循环应该给你想要的结果(如果这正是你想要的结果:)):

objHeigh = CInt(InputBox$("Assign a new size of Height", "Heigh")) 
' give the user a way out 
If objHeigh = 0 Then 
    Exit Sub 
End If 
objHeigh = ConvertCmToPoint(objHeigh) 

objWidth = CInt(InputBox$("Assign a new size of Width", "Width")) 
' give the user a way out 
If objWidth = 0 Then 
    Exit Sub 
End If 
objWidth = ConvertCmToPoint(objWidth) 

For Each oSh In ActiveWindow.Selection.ShapeRange 
    If objName <> "" Then 
     oSh.Name = objName 
    End If 

    oSh.Height = CInt(objHeigh) 
    oSh.Width = CInt(objWidth) 
Next 
+0

好的谢谢。但我应该在哪里分配我的代码中的功能? – Norby

+0

将.e.g放在与test()子模块相同的模块中,然后可以像ConvertCmToPoint(10.5)那样调用它。所以基本上你可以在你的初始代码的“end sub”行下面复制和粘贴功能 – DAXaholic

+0

是的,我知道这一点。对不起,因为Im新的VBA Im混淆了在哪里调用该函数,我应该分配给变量还是?谢谢你的努力! – Norby