使用VBA在Word表中选择不连续的单元格

时间:2016-11-19 21:25:12

标签: vba ms-word

使用键盘&鼠标我可以在表格中选择多个非连续的单元格并更改字体大小和字体等属性。颜色和细胞着色。我也可以选择多个列(连续,未尝试非连续)。我找不到在VBA中执行此操作的方法,并且记录宏没有捕获任何内容。

我的目标只是将细胞(1,1)通过细胞(x,y)遮蔽一种颜色,将细胞遮蔽另一种颜色。我不能让Word范围为我工作,因为它们显然是先行,然后是列。

我有一个4列X 20行表(用于打印标签)。如果已经打印了第1个2个col和half 3的一半,我想表示通过在表中将这些单元的一个阴影和第3列的下半部分(第11-20行)和第4列的不同阴影。我目前通过循环遍历表格中的所有单元格并使用行和放大来完成它。 col索引与If THEN ELSE,但必须有一个更有效的方式。

我知道如果我先使用行然后使用列会更容易(这就是我现在正在做的事情),但是我觉得我无法在VBA中做一些我可以手动做的事情。

真实情况稍微复杂一点,因为纸张上可以有2种不同的标签类型,文字和图片不同。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

0)不使用行,使用绝对单元格范围

1)如果您有3个部分,则应选择它们,然后单独重新着色

2)以下是我的一个宏的片段,用于在文档的第一个表格中仅选择过去3的所有行的单元格11-17

<?php session_start();
if(isset($_POST['Submit'])) {
$youremail = 'email-here@gmail.com';
$fromsubject = 'domain-here.com';
$name = $_POST['name'];
$mail = $_POST['mail'];
$message = $_POST['message']; 
    $to = $youremail; 
    $mailsubject = 'Masage recived from'.$fromsubject.' Contact Page';
    $body = $fromsubject.'

    The person that contacted you is  '.$name.'
     E-mail: '.$mail.'

     Message: 
     '.$message.'

    |---------END MESSAGE----------|'; 
echo "Thank you fo your feedback."; 
                                mail($to, $subject, $body);
 } else { 
echo "You must write a message"; 
}
?> 

3)以下将颜色设置为浅蓝色 4)我还建议使用wdColorAutomatic来确保文本在新背景上可见

    ActiveDocument.Range(Start:=ActiveDocument.Tables(1) _
    .Cell(3, 11).Range.Start, End:=ActiveDocument.Tables(1) _  
    .Cell(ActiveDocument.Tables(1).Rows.Count, 17).Range.End).Select

5)记得正确选择你的桌子,如果你先选择桌子就可以使用

    Selection.Shading.Texture = wdTextureNone
    Selection.Shading.ForegroundPatternColor = wdColorAutomatic
    Selection.Shading.BackgroundPatternColor = wdColorLightTurquoise

6)确保你在正确的桌子上