Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
Vba 如何避免图形对象在屏幕上和打印出来时的不同布局?_Vba_Excel - Fatal编程技术网

Vba 如何避免图形对象在屏幕上和打印出来时的不同布局?

Vba 如何避免图形对象在屏幕上和打印出来时的不同布局?,vba,excel,Vba,Excel,我在excel中创建了一些电话协议表,我想添加一个带有四边形纸的部分,用于绘制草图。因此,我用VBA编写了一个非常简单的宏,在选定范围内绘制水平线和垂直线: Public Sub Fill() Dim angepeilteMaschenWeiteInPixel As Integer angepeilteMaschenWeiteInPixel = 15 Dim LinienFarbe As Long LinienFarbe = RGB(220, 220, 220

我在excel中创建了一些电话协议表,我想添加一个带有四边形纸的部分,用于绘制草图。因此,我用VBA编写了一个非常简单的宏,在选定范围内绘制水平线和垂直线:

Public Sub Fill()

    Dim angepeilteMaschenWeiteInPixel As Integer
    angepeilteMaschenWeiteInPixel = 15

    Dim LinienFarbe As Long
    LinienFarbe = RGB(220, 220, 220)

    Dim obenLinks As Double, obenRechts As Double
    Dim untenLinks As Double, untenRechts As Double
    Dim ausgewaehlteRange As Range

    Set ausgewaehlteRange = Selection

    ' Anzahl Spalten und Zeilen ermitteln bei idealer Breite/Höhe 10px

    Dim idealeSpaltenAnzahl As Integer
    Dim idealeZeilenAnzahl As Integer

    idealeSpaltenAnzahl = CInt(Round((ausgewaehlteRange.Width / angepeilteMaschenWeiteInPixel), 0))
    idealeZeilenAnzahl = CInt(Round((ausgewaehlteRange.Height / angepeilteMaschenWeiteInPixel), 0))

    ' Aus der idealen Spalten- und Zeilenanzahl die ideale Maschenweite und - höhe in Pixeln ermitteln

    Dim idealeMaschenBreite As Double
    Dim idealeMaschenHoehe As Double

    idealeMaschenBreite = ausgewaehlteRange.Width / CDbl(idealeSpaltenAnzahl)
    idealeMaschenHoehe = ausgewaehlteRange.Height / CDbl(idealeZeilenAnzahl)

    ' vertikale Linien zeichnen

    Dim i As Integer

    For i = 1 To idealeSpaltenAnzahl - 1

        Dim horizontal As Integer
        horizontal = CInt(ausgewaehlteRange.Left + i * idealeMaschenBreite)

        Dim oben As Integer
        oben = Round(ausgewaehlteRange.Top, 0)

        Dim unten As Integer
        unten = Round(oben + ausgewaehlteRange.Height, 0)


        With ActiveSheet.Shapes.AddLine(horizontal, oben, horizontal, unten).Line
            .ForeColor.RGB = LinienFarbe



        End With

    Next i

    ' horizontale Linien zeichnen

    Dim j As Integer


    For j = 1 To idealeZeilenAnzahl - 1

        Dim vertikal As Integer
        vertikal = CInt(ausgewaehlteRange.Top + j * idealeMaschenHoehe)

        Dim links As Integer
        links = CInt(Round(ausgewaehlteRange.Left, 0))

        Dim rechts As Integer
        rechts = CInt(Round(links + ausgewaehlteRange.Width, 0))


        With ActiveSheet.Shapes.AddLine(links, vertikal, rechts, vertikal).Line
            .ForeColor.RGB = LinienFarbe



        End With

    Next j

End Sub
在excel中,一切看起来都很好:

但在打印预览和打印输出中,水平线间隙不均匀,我不知道为什么:


有人能帮我吗?

我怀疑这些细胞在移动。尝试将“对象定位”属性设置为“不移动单元格或调整单元格大小”,其英文值为
xlFreeFloating

例如:

With ActiveSheet.Shapes.AddLine(links, vertikal, rechts, vertikal)
    .Line.ForeColor.RGB = LinienFarbe
    .Placement = xlFreeFloating
End With

编辑

有趣的行为。。。我仍然认为这与单元格和边距有关,因为在打印预览中,行会随着单元格宽度的变化而移动,即使“位置”设置为“自由形式”

我确实找到了一个解决办法,将这些行组合在一起

添加了三行代码。在创建水平线和垂直线后,将以下内容添加到With块

.Select Replace:=False
现在将这一行添加到子项的末尾:

Selection.Group
现在,刚刚创建的所有行都被分组在一起

打印预览的结果图像


供您参考的最后一个代码块示例:

' horizontale Linien zeichnen
Dim j As Integer

For j = 1 To idealeZeilenAnzahl - 1
    Dim vertikal As Integer
    vertikal = CInt(ausgewaehlteRange.Top + j * idealeMaschenHoehe)

    Dim links As Integer
    links = CInt(Round(ausgewaehlteRange.Left, 0))

    Dim rechts As Integer
    rechts = CInt(Round(links + ausgewaehlteRange.Width, 0))

    With ActiveSheet.Shapes.AddLine(links, vertikal, rechts, vertikal)
        .Line.ForeColor.RGB = LinienFarbe
        .Placement = xlFreeFloating
        .Select Replace:=False
    End With
Next j

Selection.Group
End Sub

不幸的是,这没有任何效果。它看起来仍然和上面的截图一样。你能通过Dropbox或类似的方式共享你的文件吗?去掉任何机密。当然,给你:。目前还没有访问宏的快捷方式。“清除”用于清除所有行,“填充”用于用行填充选定范围。谢谢,请查看我的编辑。我找到了一个可能对你有用的方法。这完全奏效了,我自己永远也不会明白。谢谢